#include<bits/stdc++.h>

#define int long long
#define INF 4485090715960753727
#define maxn 100005

using namespace std;

inline int read(){
    int lre=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-'){
            f=-1;
        }
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        lre=(lre<<3)+(lre<<1)+(c-'0');
        c=getchar();
    }
    return lre*f;
}

int n,m,k,t;
int x[10];
int a[maxn],c[maxn];

int ind[maxn];
string s[maxn];
int arr[maxn],res[maxn];

bool cmp(int a,int b){
    return c[a]<c[b];
}

int solve(){
    k=0;
    for(int i=1;i<=m;i++){
        while((1<<k)<c[ind[i]])k++;
    }

    int ans=0;
    for(int i=1;i<=n;i++){
        ans^=res[i]*i;
    }
    return ans;
}

signed main(){

    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);

    n=read();m=read();k=0;
    while((1<<k)<n)k++;
    for(int i=1;i<=n;i++){
        a[i]=read();
    }
    for(int i=1;i<=m;i++){
        c[i]=read();ind[i]=i;
    }
    sort(ind+1,ind+m+1,cmp);
    for(int i=1;i<=k;++i){
        cin>>s[i];
    }

    t=read();
    while(t--){
        for(int i=0;i<=3;i++){
            x[i]=read();
        }
        for(int i=1;i<=n;i++){
            arr[i]=a[i]^x[i];
        }
    //    cout<<"t="<<t<<endl;
        printf("%lld\n",solve());
    }


    return 0;
}
